#ifndef __ORIGINATOR_H__
#define __ORIGINATOR_H__

class Mementor;
class Originator
{
public:
    Originator() = default;
    ~Originator();

    Mementor *CreateMementor();
    void SaveMemento(Mementor *mem);
    void RestoreMemento(Mementor *mem);

    std::string GetState();
    void SetState(const std::string & state);

    void PrintInfo();
private:
    std::string state_;
    Mementor *mt_;
};

class Mementor
{
public:
private:
    friend class Originator;

    Mementor() = default;
    ~Mementor() = default;

    void SetState(const std::string state);
    std::string GetState();

private:
    std::string state_;
};


#endif

